package pms.om;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity
@Table(name = "tbl_abteilung")

public class Abteilung {
	@Id
	@GeneratedValue
	@Column(name = "pk_abteilung")   // Primärschlüssel Tabelle Abteilung
	private int id;
	private String abteilungsname;
	private String maximal_duerfen_gleichzeitig_fehlen; // Gibt die Anzahl Mitarbeiter an, die gleichzeitig in der Abteilung fehlen duerfen
	
	//Kardinaliäten	
	@ManyToMany(targetEntity = pms.om.Mitarbeiter.class,
				cascade={CascadeType.PERSIST},
				fetch = FetchType.EAGER)
	@JoinTable(name="tbl_MitarbeiterinAbteilung",
				joinColumns={@JoinColumn(name="fk_abteilung")},
				inverseJoinColumns={@JoinColumn(name="fk_mitarbeiter")})
	private Set<Mitarbeiter> mitarbeiterinabteilung;
	
    @Override
    public boolean equals(Object o) {
    	return id == ((Abteilung) o).getId();
    }
        	
	// Konstruktoren
    public Abteilung() {
    	this.abteilungsname = "";
    	this.maximal_duerfen_gleichzeitig_fehlen = "";
    }
	
    public Abteilung(String abteilungsname, String maximal_duerfen_gleichzeitig_fehlen) {
		this.abteilungsname = abteilungsname;
        this.maximal_duerfen_gleichzeitig_fehlen = maximal_duerfen_gleichzeitig_fehlen;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getAbteilungsname() {
		return abteilungsname;
	}
	public void setAbteilungsname(String abteilungsname) {
		this.abteilungsname = abteilungsname;
	}
	public String getMaximal_duerfen_gleichzeitig_fehlen() {
		return maximal_duerfen_gleichzeitig_fehlen;
	}
	public void setMaximal_duerfen_gleichzeitig_fehlen(
			String maximal_duerfen_gleichzeitig_fehlen) {
		this.maximal_duerfen_gleichzeitig_fehlen = maximal_duerfen_gleichzeitig_fehlen;
	}

	public Set<Mitarbeiter> getMitarbeiterinabteilung() {
		return mitarbeiterinabteilung;
	}

	public void setMitarbeiterinabteilung(Set<Mitarbeiter> mitarbeiterinabteilung) {
		this.mitarbeiterinabteilung = mitarbeiterinabteilung;
	}
	
	public void fuegeMitarbeiterhinzu(Mitarbeiter m) {
		this.mitarbeiterinabteilung.add(m);
	}
	
	public void loescheMitarbeiter(Mitarbeiter m) {
        Set<Mitarbeiter> neu = new HashSet<Mitarbeiter>();
        for (Mitarbeiter mitarbeiter : this.mitarbeiterinabteilung) {
        	if (!mitarbeiter.equals(m)) {
        		neu.add(mitarbeiter);
        	} 
		}
        setMitarbeiterinabteilung(neu);
	}
}
